package com.jic.weamop.weBankAMOP.service;

import com.jic.weamop.weBankAMOP.common.server.BaseService;
import com.jic.weamop.weBankAMOP.common.server.MessageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;

@Service("com.jic.weamop.weBankAMOP.service.ContractService")
@Lazy(false)
/**
 * 合约服务类，如果有多个合约服务在这里面统一管理
 * @author v_wbgyang
 *
 */
public class ContractService {

	@Autowired
    MessageService messageService;

	@Value("${sdk.isLoadLazy}")
	private boolean isLoadLazy;

	private static Object obj;

	public ContractService(){
		//如果不为延时加载 默认为即使加载
		if(!isLoadLazy){
			init();
		}
	}
	/**
	 *  这种设计的目的是为了通过obj对象保证服务只被启动一次（其实BaseService已保证只加载一次了）
	 *  并且此设计去支持延时加载和即时加载问题(虽然不是很好，但能正确解决问题)
	 * 
	 */


	public void init(){
		if(obj==null){
			synchronized (ContractService.class) {
				if(obj==null){
					obj=new Object();
					try {
						Class.forName(BaseService.class.getName());
					} catch (Exception e) {
						e.printStackTrace();
						throw new RuntimeException(e.getMessage());
					}
				}
			}
		}
	}
	/**
	 * amop通讯接口
	 * @return
	 */
	public MessageService getMessageService(){
		init();
		return messageService;
	}

}
